<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>构造函数</title>
    <script>
        /* 构造函数 */
        /* 
        创建一个构造函数
            构造函数就是一个普通的函数，创建方式和普通函数没有区别
            不同的是构造函数习惯上首字母大写

            区别不同的是调用方式不同
                普通函数是直接调用，而构造函数需要使用new关键字来调用
        */
        /* 
        构造函数的执行过程
             1.调用时立刻创建一个新的对象
             2.将新建的对象设置为函数中的this，在构造函数中可以用this来引用新建的对象
             3.逐行执行函数中的代码
             4.将新建的对象作为返回值返回
        */
        /* 
        this的情况
         1.当以函数的形式调用时，this是window
         2.当以方法形式调用时，谁调用方法。this就是谁
         3.当以构造函数的形式调用时，this就是新建的那个对象
        */
        //添加三个参数
        function Person(name, age, gender) {
            //向新建对象per中添加name属性，值为孙悟空
            this.name = name;
            //下同
            this.age = age;
            this.gender = gender;
            this.sayName = function() {
                console.log(this.name);
            }

        }
        /* 
        使用同一个构造函数成为一类对象，也称为一个类
        通过一个构造函数创建的对象，称作该函数的实例
        */

        function Dog() {

        }
        //构造函数的调用
        var per = new Person();
        var dog = new Dog();
        console.log(per.name);
        /* 
        使用instanceof可以检查一个对象是否是一个类的实例
        语法：
            对象 instanceof 构造函数
            是则返回true，否则返回false
        */
        console.log(per instanceof Person);
        //检查per是否是Object的实例
        //任何的对象和Object做instanceof检查时都会返回true
        console.log(per instanceof Object); //true
    </script>
</head>

<body>

</body>

</html>